// 采用 "函数声明" (或称作"函数语句") 方式定义函数
// "函数声明": The function declaration 
// "函数语句": function statement

function add( first , second ){
    let result = first + second ;
    console.log( `${first} + ${second} = ${result}`);
    return result;
}

// 通过函数名称来调用函数
let result = add( 10 , 20 );
console.log( 'result = ' , result );

result = add( 'abc' , 123 );
console.log( 'result = ' , result );

console.log( '- - - - - - - - - - - - - - -' );

result = add();
console.log( 'result = ' , result );

console.log( '- - - - - - - - - - - - - - -' );

result = add( 100 );
console.log( 'result = ' , result );

console.log( '- - - - - - - - - - - - - - -' );

result = add( 100 , 200 );
console.log( 'result = ' , result );

console.log( '- - - - - - - - - - - - - - -' );

// 将 add 当作普通函数来调用
result = add( 100 , 200 , 300 );
console.log( 'result = ' , result );

console.log( '- - - - - - - - - - - - - - -' );

// 将 add 当作构造函数来调用
let x = new add();
console.log( x );
x.name = '加法' ;
console.log( x );

console.log( '- - - - - - - - - - - - - - -' );

// 获取 add 本身的静态属性
console.log( Object.getOwnPropertyNames( add ) );

// 获得 add 对应的 原型
const proto = add.prototype ;
// 获得 add 原型上的属性
console.log( Object.getOwnPropertyNames( proto ) );

console.log( '- - - - - - - - - - - - - - -' );

console.log( add.name ); // 获取函数名
console.log( add.length ); // 获取形参个数

console.log( '~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~' );

function divide( dividend , divisor ) {
    // 在函数内部可以通过 arguments 来获取所有实参
    console.log( arguments );
    // arguments 是一个类似于数组的实例，可以通过 length 获取实参个数
    console.log( arguments.length );
    // 也可以通过数组下标的形式从 arguments 中获取实参
    console.log( arguments[ 0 ] );
    return dividend / divisor ;
}

divide( 10 , 2 );
divide( 20 , 5 , 1 , 2 , 3 , 4 );

console.log( '~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~' );

function sum(){
    let total = 0 ;
    // arguments 是一个类似于数组的实例，因此可以用数组的方式处理
    for( let i = 0 , n = arguments.length ; i < n ; i++ ){
        let param = arguments[ i ];
        total += param ;
    }
    return total ;
}

console.log( sum() );
console.log( sum( 5 ) );
console.log( sum( 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) );

console.log( sum.length );